Saltar al contenido principal

¿Qué lenguaje usar para desarrollo de malware?

No existe un lenguaje "correcto" universal. La elección depende de cuatro variables: objetivo, runtime disponible en el target, nivel de interacción con el SO y controles defensivos presentes.

Factores de decisión​

  • Dependencias de runtime: un lenguaje interpretado (Python, PowerShell) requiere que el intérprete/framework exista en el target, o empaquetarlo — lo cual cambia el artefacto y su firma.
  • Acceso al SO: C/C++ hablan directo con Win32/NTAPI, gestión de memoria, primitivas de procesos/hilos. Los lenguajes de alto nivel acceden a eso a través de capas intermedias.
  • Características del artefacto: cada lenguaje produce binarios con tamaños, metadata, imports, comportamiento de runtime y patrones de memoria distintos → son señales estáticas para el defensor.
  • Costo de reversing: binarios compilados en C/C++/Rust son más caros de analizar que scripts, pero ningún lenguaje es inmune al reversing.
  • Visibilidad defensiva: el lenguaje importa menos que el comportamiento. Lo que vigila un EDR maduro: APIs usadas, relaciones padre-hijo, permisos de memoria (RWX), red, actividad de filesystem, firma de código, reputación, contexto de ejecución.

Tabla de lenguajes comunes​

LenguajeUso típico en research
C / C++Windows internals, Win32/NTAPI, memoria, inyección, loaders, tooling nativo
C# / .NETTradecraft Windows, AD, dev rápido → muy monitoreado en entornos maduros (AMSI)
PowerShellAdmin/automatización, tradecraft → altísima visibilidad
PythonLabs, builders, parsers, PoC — no payloads dependency-free
Go / RustTooling standalone, cross-platform → tradeoffs en tamaño, runtime, detección
AssemblyEntender shellcode, calling conventions, stack, reversing. Skill de soporte, no lenguaje primario

Alto nivel vs bajo nivel​

Es un espectro, no una frontera binaria:

  • Alto nivel (Python, PowerShell, C#): más abstracción, prototipado rápido, pero arrastran intérprete/runtime/framework que suma visibilidad defensiva.
  • Bajo nivel (C, C++): control directo de memoria, estructuras, calling conventions y salida del compilador. Es por eso que históricamente dominan el malware Windows: hablan con el SO sin traductor.

Conclusión​

Elegir lenguaje es elegir el vehículo del trabajo:

  • PowerShell/C# en un entorno maduro = ir en bus público: barato y rápido, pero hay cámaras, horarios registrados y todos los pasajeros (telemetría) te ven.
  • C compilado = construir tu propio vehículo pieza por pieza: decides cada tornillo (imports, secciones PE, CRT), no dependes de que el target tenga estación de servicio (runtime), y el resultado no se parece a nada de catálogo (menos firmas genéricas).
  • Python = furgoneta de producción: perfecta para mover el equipo (builders, ofuscadores, C2 infra), pero nunca la usas en la escena del crimen (el endpoint).